package models

import (
	"fmt"
	"gorm.io/gorm"
)

// ProRolePermission 项目角色权限关联表
type ProRolePermission struct {
	ID              uint64 `gorm:"primaryKey;autoIncrement" json:"id" form:"id"`
	ProRoleID       uint64 `gorm:"notNull" json:"pro_role_id" form:"pro_role_id"`
	ProPermissionID uint64 `gorm:"notNull" json:"pro_permission_id" form:"pro_permission_id"`
	CreatedAt       string `gorm:"type:timestamp;default:CURRENT_TIMESTAMP" json:"created_at" form:"created_at"`
	UpdatedAt       string `gorm:"type:timestamp;default:CURRENT_TIMESTAMP;update:CURRENT_TIMESTAMP" json:"updated_at" form:"updated_at"`
}

func (ProRolePermission) TableName() string {
	return "pro_role_permissions"
}

//	GetPermissionIDByProRoleID
//
// 描述信息： 根据项目角色ID获取该角色的所有权限ID
//
// Param：
//
//	db ：数据库连接实例
//	proRoleID ：角色id
//
// Return：
//
//	[]uint64 ：角色权限id 切片
//	error ：错误信息
func GetPermissionIDByProRoleID(db *gorm.DB, proRoleID uint64) ([]uint64, error) {
	var proRolePermissions []ProRolePermission
	if err := db.Model(&ProRolePermission{}).Where("pro_role_id = ?", proRoleID).Find(&proRolePermissions).Error; err != nil {
		return nil, fmt.Errorf("failed to query pro role permissions: %w", err)
	}

	// 提取权限ID
	var permissionIDs []uint64
	for _, permission := range proRolePermissions {
		permissionIDs = append(permissionIDs, permission.ProPermissionID)
	}

	return permissionIDs, nil
}
